package com.ltu.service.tencent;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.scheduling.annotation.Async;

import com.alibaba.fastjson.JSONObject;
import com.ltu.common.Constants;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;

// 导入可选配置类
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.iotexplorer.v20190423.IotexplorerClient;
import com.tencentcloudapi.iotexplorer.v20190423.models.ControlDeviceDataRequest;
import com.tencentcloudapi.iotexplorer.v20190423.models.ControlDeviceDataResponse;
// 导入对应VMS模块的client
import com.tencentcloudapi.vms.v20200902.VmsClient;

// 导入要请求接口对应的request response类
import com.tencentcloudapi.vms.v20200902.models.SendTtsVoiceRequest;
import com.tencentcloudapi.vms.v20200902.models.SendTtsVoiceResponse;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SendTtsVoice
{
	private final static String  AppId="1400639906" ;
	private final static String  AppKey="be7d07b1a15c32cd0751de7ebe51c1c3";
	
	private final static String  ENDPOINT="vms.tencentcloudapi.com";
	private final static String  REGION="ap-guangzhou";
	

    public static String  TenCentSecretId="AKIDJRJuFMCm45pIUP3QXNxGJ5apnTs1tUor" ;
    public static String  TenCentSecretKey="nJYVCcDYeU3LN8cpkPnujIabLp2zf5E6";
   private  static String templateId= "1329633";
   
	private static  Credential cred;
	
	
	/**
	 * 发送语音消息
	 * @param templateId 语音模板
	 * @param calledNumber 电话
	 * @param templateParamSet 参数
	 */
	public static void sendYuYinMsg(String calledNumber, String[] templateParamSet) {
        try{
            // 实例化一个认证对象，入参需要传入腾讯云账户secretId，secretKey,此处还需注意密钥对的保密
            // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
        	if(ObjectUtils.isEmpty( cred))
        		cred = new Credential(TenCentSecretId,  TenCentSecretKey );
//        		cred = new Credential(Constants.TenCentSecretId,  Constants.TenCentSecretKey );
            // 实例化一个http选项，可选的，没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint(ENDPOINT);
            // 实例化一个client选项，可选的，没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setSignMethod("TC3-HMAC-SHA256");
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            VmsClient client = new VmsClient(cred, REGION, clientProfile);
            /* 实例化一个请求对象，根据调用的接口和实际情况，可以进一步设置请求参数
             * 您可以直接查询SDK源码确定接口有哪些属性可以设置
             * 属性可能是基本类型，也可能引用了另一个数据结构
             * 推荐使用IDE进行开发，可以方便的跳转查阅各个接口和数据结构的文档说明 */
            SendTtsVoiceRequest req = new SendTtsVoiceRequest();

            /* 填充请求参数,这里request对象的成员变量即对应接口的入参
             * 您可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
             * 基本类型的设置:
             * 帮助链接：
             * 语音消息控制台：https://console.cloud.tencent.com/vms
             * vms helper：https://cloud.tencent.com/document/product/1128/37720 */

            // 模板 ID，必须填写在控制台审核通过的模板 ID，可登录 [语音消息控制台] 查看模板 ID
            req.setTemplateId(templateId);

            // 模板参数，若模板没有参数，请提供为空数组
           
            req.setTemplateParamSet(templateParamSet);

            /* 被叫手机号码，采用 e.164 标准，格式为+[国家或地区码][用户号码]
             * 例如：+8613711112222，其中前面有一个+号，86为国家码，13711112222为手机号 */
             calledNumber = "+86"+calledNumber;
            req.setCalledNumber(calledNumber);

            // 在 [语音控制台] 添加应用后生成的实际SdkAppid，示例如1400006666
            String voiceSdkAppid = AppId;
            req.setVoiceSdkAppid(voiceSdkAppid);

            // 播放次数，可选，最多3次，默认2次
            Long playTimes = 2L;
            req.setPlayTimes(playTimes);

            // 用户的 session 内容，腾讯 server 回包中会原样返回
            String sessionContext = "zesc";
            req.setSessionContext(sessionContext);

            /* 通过 client 对象调用 SendTtsVoice 方法发起请求。注意请求方法名与请求对象是对应的
             * 返回的 res 是一个 SendTtsVoiceResponse 类的实例，与请求对象对应 */
            SendTtsVoiceResponse resp = client.SendTtsVoice(req);
            // 输出json格式的字符串回包
            String resultStr= SendTtsVoiceResponse.toJsonString(resp);
            log.info("拨打语音通知：{}",resultStr);
            
//            JSONObject  result=JSONObject.parseObject(resultStr);
//            JSONObject  childresult =  result.getJSONObject("Result");
//            if(childresult.getIntValue("pushResult")!=0) 
//            	log.error("\n 下发语音通知失败：{}",childresult.getString("pushResult"));
            
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
	public static void main(String[] args) {
    	
    	String[] param={"鱼塘名称","机器名称","报警描述"};
    	SendTtsVoice.sendYuYinMsg("15011678982",param);
//        try {
//            /* 必要步骤：
//             * 实例化一个认证对象，入参需要传入腾讯云账户密钥对secretId，secretKey。
//             * 这里采用的是从环境变量读取的方式，需要在环境变量中先设置这两个值。
//             * 您也可以直接在代码中写死密钥对，但是小心不要将代码复制、上传或者分享给他人，
//             * 以免泄露密钥对危及您的财产安全。
//             * CAM密匙查询: https://console.cloud.tencent.com/cam/capi*/
//            Credential cred = new Credential("secretId", "secretKey");
//
//            // 实例化一个http选项，可选，没有特殊需求可以跳过
//            HttpProfile httpProfile = new HttpProfile();
//            // 设置代理
//            // httpProfile.setProxyHost("host");
//            // httpProfile.setProxyPort(port);
//            /* SDK默认使用POST方法。
//             * 如果您一定要使用GET方法，可以在这里设置。GET方法无法处理一些较大的请求 */
//            httpProfile.setReqMethod("POST");
//            /* SDK有默认的超时时间，非必要请不要进行调整
//             * 如有需要请在代码中查阅以获取最新的默认值 */
//            httpProfile.setConnTimeout(60);
//            /* SDK会自动指定域名。通常是不需要特地指定域名的，但是如果您访问的是金融区的服务
//             * 则必须手动指定域名，例如vms的上海金融区域名： vms.ap-shanghai-fsi.tencentcloudapi.com */
//            httpProfile.setEndpoint("vms.tencentcloudapi.com");
//
//            /* 非必要步骤:
//             * 实例化一个客户端配置对象，可以指定超时时间等配置 */
//            ClientProfile clientProfile = new ClientProfile();
//            /* SDK默认用TC3-HMAC-SHA256进行签名
//             * 非必要请不要修改这个字段 */
//            clientProfile.setSignMethod("TC3-HMAC-SHA256");
//            clientProfile.setHttpProfile(httpProfile);
//            /* 实例化要请求产品(以vms为例)的client对象
//             * 第二个参数是地域信息，可以直接填写字符串ap-guangzhou，或者引用预设的常量 */
//            VmsClient client = new VmsClient(cred, "ap-guangzhou", clientProfile);
//            /* 实例化一个请求对象，根据调用的接口和实际情况，可以进一步设置请求参数
//             * 您可以直接查询SDK源码确定接口有哪些属性可以设置
//             * 属性可能是基本类型，也可能引用了另一个数据结构
//             * 推荐使用IDE进行开发，可以方便的跳转查阅各个接口和数据结构的文档说明 */
//            SendTtsVoiceRequest req = new SendTtsVoiceRequest();
//
//            /* 填充请求参数,这里request对象的成员变量即对应接口的入参
//             * 您可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
//             * 基本类型的设置:
//             * 帮助链接：
//             * 语音消息控制台：https://console.cloud.tencent.com/vms
//             * vms helper：https://cloud.tencent.com/document/product/1128/37720 */
//
//            // 模板 ID，必须填写在控制台审核通过的模板 ID，可登录 [语音消息控制台] 查看模板 ID
//            String templateId = "4356";
//            req.setTemplateId(templateId);
//
//            // 模板参数，若模板没有参数，请提供为空数组
//            String[] templateParamSet = {"7652"};
//            req.setTemplateParamSet(templateParamSet);
//
//            /* 被叫手机号码，采用 e.164 标准，格式为+[国家或地区码][用户号码]
//             * 例如：+8613711112222，其中前面有一个+号，86为国家码，13711112222为手机号 */
//            String calledNumber = "+8613711112222";
//            req.setCalledNumber(calledNumber);
//
//            // 在 [语音控制台] 添加应用后生成的实际SdkAppid，示例如1400006666
//            String voiceSdkAppid = "1400006666";
//            req.setVoiceSdkAppid(voiceSdkAppid);
//
//            // 播放次数，可选，最多3次，默认2次
//            Long playTimes = 2L;
//            req.setPlayTimes(playTimes);
//
//            // 用户的 session 内容，腾讯 server 回包中会原样返回
//            String sessionContext = "xxxx";
//            req.setSessionContext(sessionContext);
//
//            /* 通过 client 对象调用 SendTtsVoice 方法发起请求。注意请求方法名与请求对象是对应的
//             * 返回的 res 是一个 SendTtsVoiceResponse 类的实例，与请求对象对应 */
//            SendTtsVoiceResponse res = client.SendTtsVoice(req);
//
//            // 输出json格式的字符串回包
//            System.out.println(SendTtsVoiceResponse.toJsonString(res));
//
//            // 也可以取出单个值，您可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
//            System.out.println(res.getRequestId());
//
//        } catch (TencentCloudSDKException e) {
//            e.printStackTrace();
//        }
    }
}